﻿Imports DevExpress.XtraScheduler
Imports DevExpress.Web.ASPxScheduler
Imports SIAVU.Dominio
Imports DevExpress.XtraScheduler.Localization
Imports DevExpress.Web.ASPxScheduler.Internal

Namespace Presentacion

    Partial Public Class ucMiProgramacion
        Inherits System.Web.UI.UserControl

        Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            Select Case Me.Page.AppRelativeVirtualPath.ToUpper
                Case "~/PRESENTACION/VERHISTORIAL.ASPX"
                    scheMiProgramacion.ResourceDataSourceID = "odsResourseVerHistorial"
                    scheMiProgramacion.Storage.Appointments.Mappings.ResourceId = "DescripcionResource"
                    scheMiProgramacion.Storage.Resources.Mappings.Caption = "DescripcionResource"
                    scheMiProgramacion.Storage.Resources.Mappings.ResourceId = "DescripcionResource"

                Case "~/PRESENTACION/REPROGRAMARTRIPULANTES.ASPX"
                    If DirectCast(Me.Page, Presentacion.ReprogramarTripulantes).PanelReprogramacionVisible Then
                        If (Not Me.Page.IsPostBack) Then
                            FillResources(scheMiProgramacion.Storage)
                        End If
                    Else
                        FillResources(scheMiProgramacion.Storage)
                    End If

                Case Else
                    If (Not Page.IsPostBack) Then
                        FillResources(scheMiProgramacion.Storage)
                    End If
            End Select

            InicializarScheduler()
        End Sub

#Region "Atributos privados"

        Private strSessionListaActividades As String
        Private strSessionListaActividadesEliminadas As String
        Private _TipoMiProgramacion As ETipoProgramacion
        Private _PeriodoProgramacion As String
        Private _Plazo As Plazo = Nothing
        Private _NombreParaMostrar As String

#End Region

#Region "Propiedades"

        Public Property TipoMiProgramacion() As ETipoProgramacion
            Get
                Return _TipoMiProgramacion
            End Get
            Set(ByVal value As ETipoProgramacion)
                _TipoMiProgramacion = value
            End Set
        End Property

        Public Property ListaActividades() As IList(Of Actividad)
            Get
                strSessionListaActividades = "BORRAR" + Session.SessionID + DirectCast(Me.Page, System.Web.UI.Page).AppRelativeVirtualPath + Me.NombreParaMostrar + "ListaActividades"
                Return Session(strSessionListaActividades)
            End Get
            Set(ByVal value As IList(Of Actividad))
                strSessionListaActividades = "BORRAR" + Session.SessionID + DirectCast(Me.Page, System.Web.UI.Page).AppRelativeVirtualPath + Me.NombreParaMostrar + "ListaActividades"
                Session(strSessionListaActividades) = value
            End Set
        End Property

        Public Property ListaActividadesEliminadas() As IList(Of Actividad)
            Get
                strSessionListaActividadesEliminadas = "BORRAR" + Session.SessionID + DirectCast(Me.Page, System.Web.UI.Page).AppRelativeVirtualPath + Me.NombreParaMostrar + "ListaActividadesEliminadas"
                Return Session(strSessionListaActividadesEliminadas)
            End Get
            Set(ByVal value As IList(Of Actividad))
                strSessionListaActividadesEliminadas = "BORRAR" + Session.SessionID + DirectCast(Me.Page, System.Web.UI.Page).AppRelativeVirtualPath + Me.NombreParaMostrar + "ListaActividadesEliminadas"
                Session(strSessionListaActividadesEliminadas) = value
            End Set
        End Property

        Public Property PeriodoProgramacion() As String
            Get
                Return _PeriodoProgramacion
            End Get
            Set(ByVal value As String)
                _PeriodoProgramacion = value
            End Set
        End Property

        Public Property Plazo() As Plazo
            Get
                If _Plazo Is Nothing Then
                    Dim oPlazo As New Plazo
                    oPlazo.getByFecha(CDate(Me.PeriodoProgramacion + "/01"))
                    _Plazo = oPlazo
                End If
                Return _Plazo
            End Get
            Set(ByVal value As Plazo)
                _Plazo = value
            End Set
        End Property

        Public Property NombreParaMostrar() As String
            Get
                Return _NombreParaMostrar
            End Get
            Set(ByVal value As String)
                _NombreParaMostrar = value
            End Set
        End Property

#End Region

#Region "Eventos"

        Protected Sub odsActividades_Selecting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.ObjectDataSourceSelectingEventArgs) Handles odsActividades.Selecting
            e.InputParameters("objActividades") = Me.ListaActividades
        End Sub

        Protected Sub odbActividades_Selected(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.ObjectDataSourceStatusEventArgs) Handles odsActividades.Selected
            If Me.ListaActividades Is Nothing Then
                Me.ListaActividades = e.ReturnValue
            End If
        End Sub

        Protected Sub scheMiProgramacion_AppointmentDeleting(ByVal sender As Object, ByVal e As DevExpress.XtraScheduler.PersistentObjectCancelEventArgs) Handles scheMiProgramacion.AppointmentDeleting
            Try
                Dim oActividad As Actividad = Nothing
                Dim iActividadID As Integer = DirectCast(sender, ASPxSchedulerStorage).GetAppointmentId(DirectCast(e.Object, Appointment))
                oActividad = FindActividadByID(iActividadID)

                If Me.Page.AppRelativeVirtualPath.ToUpper = "~/PRESENTACION/REPROGRAMARTRIPULANTES.ASPX" Then
                    If oActividad.Motivo = String.Empty Then
                        e.Cancel = True
                        Throw New Exception("Debe ingresar el motivo por el cuál se elimina la actividad")
                    Else
                        EliminarActividad(oActividad, True)
                    End If
                    Return

                ElseIf Me.Page.AppRelativeVirtualPath.ToUpper = "~/PRESENTACION/PreProgramacion.ASPX".ToUpper Then
                    EliminarActividad(oActividad, True)
                End If

            Catch ex As Exception
                Throw
            End Try
        End Sub

        Protected Sub scheMiProgramacion_PreparePopupMenu(ByVal sender As Object, ByVal e As DevExpress.Web.ASPxScheduler.PreparePopupMenuEventArgs) Handles scheMiProgramacion.PreparePopupMenu
            Dim oPopUpMenu As ASPxSchedulerPopupMenu = e.Menu
            If oPopUpMenu.Id.Equals(SchedulerMenuItemId.DefaultMenu) Then
                oPopUpMenu.Items.Clear()
            ElseIf oPopUpMenu.Id.Equals(SchedulerMenuItemId.AppointmentMenu) Then
                Dim oMenuItems As DevExpress.Web.ASPxMenu.MenuItemCollection = oPopUpMenu.Items
                Dim oMenuItem As DevExpress.Web.ASPxMenu.MenuItem = oMenuItems.FindByName("OpenAppointment")
                If oMenuItem IsNot Nothing Then
                    oMenuItem.Text = "Observación"
                End If

                oMenuItem = oMenuItems.FindByName("LabelSubMenu")
                If oMenuItem IsNot Nothing Then
                    oMenuItems.Remove(oMenuItem)
                End If

                oMenuItem = oMenuItems.FindByName("StatusSubMenu")
                If oMenuItem IsNot Nothing Then
                    oMenuItems.Remove(oMenuItem)
                End If
            End If
        End Sub

        Protected Sub scheMiProgramacion_InitAppointmentImages(ByVal sender As Object, ByVal e As DevExpress.Web.ASPxScheduler.AppointmentImagesEventArgs) Handles scheMiProgramacion.InitAppointmentImages
            Try
                Dim oAppointment As Appointment = e.Appointment
                Dim oTimeLineAppointmentViewInfo As DevExpress.Web.ASPxScheduler.Drawing.TimeLineAppointmentViewInfo = DirectCast(e.ViewInfo, DevExpress.Web.ASPxScheduler.Drawing.TimeLineAppointmentViewInfo)
                Dim oAppointmentImageInfoCollection As DevExpress.Web.ASPxScheduler.Drawing.AppointmentImageInfoCollection = e.ImageInfoList

                AgregarImagenFondoAppointment(oAppointment, oTimeLineAppointmentViewInfo)
                'AgregarImagenSegunEstadoAppointment(oAppointment, oAppointmentImageInfoCollection)

            Catch ex As Exception
                Throw
            End Try
        End Sub

        Private Sub scheMiProgramacion_InitAppointmentDisplayText(ByVal sender As Object, ByVal e As DevExpress.XtraScheduler.AppointmentDisplayTextEventArgs) Handles scheMiProgramacion.InitAppointmentDisplayText
            e.Text = MostrarTexto(e.Appointment)
        End Sub

        '//Eventos utilizados para la validacion de la nueva actividad
        Protected Sub scheMiProgramacion_BeforeExecuteCallbackCommand(ByVal sender As Object, ByVal e As DevExpress.Web.ASPxScheduler.SchedulerCallbackCommandEventArgs) Handles scheMiProgramacion.BeforeExecuteCallbackCommand
            If e.CommandId = "REFRESH" Then
                ValidarNuevaActividad()
            End If
            FillResources(scheMiProgramacion.Storage)
        End Sub

        Protected Sub scheMiProgramacion_CustomErrorText(ByVal handler As Object, ByVal e As DevExpress.Web.ASPxScheduler.ASPxSchedulerCustomErrorTextEventArgs) Handles scheMiProgramacion.CustomErrorText
            Dim subject As String = "Se ha producido un error al intentar realizar la operación.  "
            Dim detailInfo As String = e.Exception.Message
            e.ErrorText = [String].Format("{0},{1}|{2}{3}", subject.Length, detailInfo.Length, subject, detailInfo)
        End Sub

        '//Evento utilizado en la reprogramación al ingresar el motivo
        Protected Sub scheMiProgramacion_AppointmentsChanged(ByVal sender As Object, ByVal e As DevExpress.XtraScheduler.PersistentObjectsEventArgs) Handles scheMiProgramacion.AppointmentsChanged
            Dim apt As Appointment = DirectCast(DirectCast(DirectCast(e.Objects, System.Collections.IList), DevExpress.XtraScheduler.AppointmentBaseCollection)(0), DevExpress.XtraScheduler.Appointment)
            Dim oActividad As Actividad = Me.FindActividadByID(AppointmentIdHelper.GetAppointmentId(apt))
            oActividad.Motivo = apt.Description
            apt.Description = ""
        End Sub

        Private Sub scheMiProgramacion_AppointmentFormShowing(ByVal sender As Object, ByVal e As DevExpress.Web.ASPxScheduler.AppointmentFormEventArgs) Handles scheMiProgramacion.AppointmentFormShowing
            e.Container.Caption = "Ingrese el motivo de la reprogramación"
        End Sub

#End Region

#Region "Metodos"

        Public Sub InicializarScheduler()
            Try
                '//Seteo propiedades del control
                Periodo.SelectedDate = CDate(Me.PeriodoProgramacion + "/01")
                lTipoProgramacion.Text = Me.TipoMiProgramacion

                '//Defino el calendario a mostrar
                scheMiProgramacion.Start = CDate(Me.PeriodoProgramacion + "/01") '//Siempre empieza el primer día de cada mes
                scheMiProgramacion.TimelineView.IntervalCount = UIManager.CantidadDiasDelMes(Me.PeriodoProgramacion.Split("/")(1))

                '//Defino la funcion de eliminar segun la pagina
                DefinirFuncionesScheduler(Me.Page.AppRelativeVirtualPath)

            Catch ex As Exception
                Throw
            End Try
        End Sub

        Private Sub DefinirFuncionesScheduler(ByVal sNombrePagina As String)
            Select Case sNombrePagina.ToUpper()
                Case "~/PRESENTACION/PREPROGRAMACION.ASPX"
                    Me.scheMiProgramacion.OptionsToolTips.AppointmentToolTipUrl = "~/Presentacion/Controles/ucCustomAppointmentToolTipMiProgramacion.ascx"
                    Me.scheMiProgramacion.OptionsCustomization.AllowAppointmentDelete = UsedAppointmentType.All

                Case "~/PRESENTACION/REPROGRAMARTRIPULANTES.ASPX"
                    Me.scheMiProgramacion.OptionsToolTips.AppointmentToolTipUrl = "~/Presentacion/Controles/ucCustomAppointmentToolTipReProgramacion.ascx"
                    Me.scheMiProgramacion.OptionsCustomization.AllowAppointmentDelete = UsedAppointmentType.All
                    Me.scheMiProgramacion.OptionsCustomization.AllowAppointmentEdit = UsedAppointmentType.All
                    Me.scheMiProgramacion.OptionsCustomization.AllowDisplayAppointmentForm = AllowDisplayAppointmentForm.Always

                Case "~/PRESENTACION/VERPROGRAMACIONASIGNADA.ASPX"
                    Me.scheMiProgramacion.OptionsToolTips.AppointmentToolTipUrl = "~/Presentacion/Controles/ucCustomAppointmentToolTipPostas.ascx"
                    Me.scheMiProgramacion.OptionsCustomization.AllowAppointmentDelete = UsedAppointmentType.None

                Case "~/PRESENTACION/VERHISTORIAL.ASPX"
                    Me.scheMiProgramacion.OptionsCustomization.AllowAppointmentDelete = UsedAppointmentType.None
                    Me.scheMiProgramacion.OptionsToolTips.AppointmentToolTipUrl = "~/Presentacion/Controles/ucCustomAppointmentToolTipPostas.ascx"

                Case Else
                    Me.scheMiProgramacion.OptionsToolTips.AppointmentToolTipUrl = "~/Presentacion/Controles/ucCustomAppointmentToolTipPostas.ascx"
                    Me.scheMiProgramacion.OptionsCustomization.AllowAppointmentDelete = UsedAppointmentType.None
            End Select
        End Sub

        Public Sub InsertarNuevoActividad(ByVal oActividad As Actividad)
            Try
                'Dim oActividadDiaLibre As ActividadDiaLibre

                If Me.ListaActividades Is Nothing Then
                    Me.ListaActividades = New List(Of Actividad)
                End If
                AsignarActividadIDNegativo(oActividad)

                Select Case oActividad.GetType().ToString
                    Case Type.GetType("SIAVU.Dominio.ActividadPosta").ToString
                        '//Si es una actividad POSTA eliminada anteriormente la saco de la lista de eliminadas
                        'TODO Ver BIEN cuando hay que eliminar!!!!
                        'EliminarActividadDeListaEliminadas(oActividad)

                    Case Type.GetType("SIAVU.Dominio.ActividadDiaLibre").ToString
                        oActividad.FechaFin = oActividad.FechaFin.AddDays(3)
                End Select
                oActividad.EstadoActividad = EEstadoActividad.Desconocido
                Me.ListaActividades.Add(oActividad)

            Catch ex As Exception
                Throw
            End Try


            ' '' ''Dim apt As Appointment = scheMiProgramacion.Storage.CreateAppointment(AppointmentType.Normal)
            ' '' ''apt.Description = objActividad.Descripcion
            ' '' ''apt.Start = objActividad.FechaInicio
            ' '' ''apt.End = objActividad.FechaFin
            ' '' ''scheMiProgramacion.Storage.Appointments.Add(apt)
            ' '' ''scheMiProgramacion.DataBind()
        End Sub

        Public Sub EliminarActividad(ByVal objActividad As Actividad, Optional ByVal bAgregarAListaEliminadas As Boolean = True)
            Try
                For Each oActividadAux As Actividad In Me.ListaActividades
                    If oActividadAux.ActividadID = objActividad.ActividadID Then
                        Select Case oActividadAux.GetType().ToString
                            Case Type.GetType("SIAVU.Dominio.ActividadDiaLibre").ToString
                                If bAgregarAListaEliminadas = True AndAlso oActividadAux.ActividadID > 0 Then
                                    Me.AgregarActividadEliminadaALista(oActividadAux)
                                End If
                                Me.ListaActividades.Remove(oActividadAux)
                                Exit For

                            Case Type.GetType("SIAVU.Dominio.ActividadPosta").ToString
                                If bAgregarAListaEliminadas = True AndAlso oActividadAux.ActividadID > 0 Then
                                    DirectCast(oActividadAux, ActividadPosta).GetPosta()
                                    Me.AgregarActividadEliminadaALista(oActividadAux)
                                End If
                                Me.ListaActividades.Remove(oActividadAux)
                                Exit For

                            Case Else
                                Me.ListaActividades.Remove(oActividadAux)
                                Exit For
                        End Select
                    End If
                Next
            Catch ex As Exception
                Throw
            End Try
        End Sub

        Public Sub ActualizarActividad(ByVal objActividad As Actividad)
            Try
                For Each oActividadAux As Actividad In Me.ListaActividades
                    If oActividadAux.ActividadID = objActividad.ActividadID Then
                        oActividadAux = objActividad
                    End If
                Next

            Catch ex As Exception
                Throw
            End Try
        End Sub

        Private Sub AgregarActividadEliminadaALista(ByVal oActividad As Actividad)
            Dim oListAux As List(Of Actividad)
            If Me.ListaActividadesEliminadas Is Nothing Then
                oListAux = New List(Of Actividad)
            Else
                oListAux = Me.ListaActividadesEliminadas
            End If
            oListAux.Add(oActividad)

            Me.ListaActividadesEliminadas = oListAux
        End Sub

        Private Function MostrarTexto(ByVal oAppointment As Appointment) As String
            Dim strDescripcion As String = String.Empty

            Try
                '//Primero que nada obtengo la actividad asociada al appointment en cuestión
                Dim oActividad As Actividad = Me.FindActividadByID(AppointmentIdHelper.GetAppointmentId(oAppointment))
                If (oActividad IsNot Nothing) Then
                    '//Y según el tipo de actividad el texto que va
                    Select Case oActividad.GetType().ToString
                        Case Type.GetType("SIAVU.Dominio.ActividadPosta").ToString
                            strDescripcion = oActividad.Descripcion.Split("-")(1).Trim
                        Case Else
                            strDescripcion = ""
                    End Select
                Else
                    strDescripcion = ""
                End If

            Catch ex As Exception
                Throw

            End Try

            Return strDescripcion
        End Function

        Public Sub FillResources(ByVal storage As ASPxSchedulerStorage)
            Dim resources As ResourceCollection = storage.Resources.Items
            storage.BeginUpdate()
            Try
                resources.Add(New DevExpress.XtraScheduler.Resource(1, NombreParaMostrar))

            Catch ex As Exception
                Throw

            Finally
                storage.EndUpdate()
            End Try
        End Sub

        Private Sub AsignarActividadIDNegativo(ByRef oActividad As Actividad)
            If Session("ActividadID") Is Nothing Then
                Session("ActividadID") = 0
            End If
            oActividad.ActividadID = CType(Session("ActividadID"), Long) - 1
            Session("ActividadID") -= 1
        End Sub

        Public Sub AsignarActividadIDCero()
            For Each objActAux As Actividad In Me.ListaActividades
                If objActAux.ActividadID < 0 Then
                    objActAux.ActividadID = 0
                End If
            Next
        End Sub

        Private Sub AgregarImagenFondoAppointment(ByRef oAppointment As Appointment, ByRef oTimeLineAppointmentViewInfo As DevExpress.Web.ASPxScheduler.Drawing.TimeLineAppointmentViewInfo)
            Select Case oAppointment.LabelId
                Case ETipoActividad.Posta
                    oTimeLineAppointmentViewInfo.AppointmentStyle.BackgroundImage.ImageUrl = "~/Imagenes/BluePlane.png"
                    oTimeLineAppointmentViewInfo.AppointmentStyle.BackgroundImage.HorizontalPosition = "left"
                    oTimeLineAppointmentViewInfo.AppointmentStyle.BackgroundImage.VerticalPosition = "top"
                    oTimeLineAppointmentViewInfo.AppointmentStyle.BackgroundImage.Repeat = DevExpress.Web.ASPxClasses.BackgroundImageRepeat.NoRepeat
                Case ETipoActividad.DiaLibre
                    oTimeLineAppointmentViewInfo.AppointmentStyle.BackgroundImage.ImageUrl = "~/Imagenes/YellowSmile.png"
                    oTimeLineAppointmentViewInfo.AppointmentStyle.BackgroundImage.HorizontalPosition = "center"
                    oTimeLineAppointmentViewInfo.AppointmentStyle.BackgroundImage.VerticalPosition = "top"
                    oTimeLineAppointmentViewInfo.AppointmentStyle.BackgroundImage.Repeat = DevExpress.Web.ASPxClasses.BackgroundImageRepeat.NoRepeat
                Case ETipoActividad.DiaSinProgramar
                    oTimeLineAppointmentViewInfo.AppointmentStyle.BackgroundImage.ImageUrl = "~/Imagenes/GreenQuestion.jpg"
                    oTimeLineAppointmentViewInfo.AppointmentStyle.BackgroundImage.HorizontalPosition = "center"
                    oTimeLineAppointmentViewInfo.AppointmentStyle.BackgroundImage.VerticalPosition = "top"
                    oTimeLineAppointmentViewInfo.AppointmentStyle.BackgroundImage.Repeat = DevExpress.Web.ASPxClasses.BackgroundImageRepeat.NoRepeat
                Case ETipoActividad.Guardia
                    oTimeLineAppointmentViewInfo.AppointmentStyle.BackgroundImage.ImageUrl = "~/Imagenes/Guardia.png"
                    oTimeLineAppointmentViewInfo.AppointmentStyle.BackgroundImage.HorizontalPosition = "center"
                    oTimeLineAppointmentViewInfo.AppointmentStyle.BackgroundImage.VerticalPosition = "top"
                    oTimeLineAppointmentViewInfo.AppointmentStyle.BackgroundImage.Repeat = DevExpress.Web.ASPxClasses.BackgroundImageRepeat.NoRepeat
            End Select
        End Sub

        Private Function ValidarNuevaActividad() As Boolean
            '//Obtengo ultima actividad insertada (Nueva Actividad = Ultima de la lista)
            If Me.ListaActividades IsNot Nothing AndAlso Me.ListaActividades.Count > 0 Then
                Dim oActividadNueva As Actividad = Me.ListaActividades(Me.ListaActividades.Count - 1)
                Dim FechaInicioActividadNueva As DateTime
                Dim FechaFinActividadNueva As DateTime
                Dim FechaInicioActividadActual As DateTime
                Dim FechaFinActividadActual As DateTime
                Dim oReglaPostaActividadActual As Regla
                Select Case oActividadNueva.GetType().ToString
                    Case Type.GetType("SIAVU.Dominio.ActividadDiaLibre").ToString
                        '//Me fijo que no haya insertado los dias libres anteriormente
                        FechaInicioActividadNueva = oActividadNueva.FechaInicio
                        FechaFinActividadNueva = oActividadNueva.FechaFin
                        For i As Integer = 0 To Me.ListaActividades.Count - 2
                            If Me.ListaActividades(i).GetType Is Type.GetType("SIAVU.Dominio.ActividadDiaLibre") Then
                                Me.ListaActividades.RemoveAt(Me.ListaActividades.Count - 1)
                                Throw New Exception("Ya ha seleccionado sus días libres.")
                            Else
                                If Me.ListaActividades(i).GetType Is Type.GetType("SIAVU.Dominio.ActividadPosta") Then
                                    oReglaPostaActividadActual = DirectCast(Me.ListaActividades(i), ActividadPosta).Posta.VueloIda.CiudadDestino.Reglas(0)
                                    FechaInicioActividadActual = Me.ListaActividades(i).FechaInicio.AddHours(-oReglaPostaActividadActual.HorasPreDespegue)
                                    FechaFinActividadActual = Me.ListaActividades(i).FechaFin.AddHours(oReglaPostaActividadActual.HorasPostAterrizaje)
                                Else
                                    FechaInicioActividadActual = Me.ListaActividades(i).FechaInicio
                                    FechaFinActividadActual = Me.ListaActividades(i).FechaFin
                                End If

                                If Not (FechaFinActividadNueva <= FechaInicioActividadActual Or FechaInicioActividadNueva >= FechaFinActividadActual) Then
                                    EliminarActividad(oActividadNueva, False)
                                    Throw New Exception("Ha intentado agregar una actividad en una fecha para la cual ya existía una actividad.")
                                End If
                            End If
                        Next

                    Case Type.GetType("SIAVU.Dominio.ActividadPosta").ToString
                        Dim oReglaPostaActividadNueva As Regla = DirectCast(oActividadNueva, ActividadPosta).Posta.VueloIda.CiudadDestino.Reglas(0)

                        FechaInicioActividadNueva = oActividadNueva.FechaInicio.AddHours(-oReglaPostaActividadNueva.HorasPreDespegue)
                        FechaFinActividadNueva = oActividadNueva.FechaFin.AddHours(oReglaPostaActividadNueva.HorasPostAterrizaje)

                        For i = 0 To Me.ListaActividades.Count - 2
                            If Me.ListaActividades(i).GetType Is Type.GetType("SIAVU.Dominio.ActividadPosta") Then
                                oReglaPostaActividadActual = DirectCast(Me.ListaActividades(i), ActividadPosta).Posta.VueloIda.CiudadDestino.Reglas(0)
                                FechaInicioActividadActual = Me.ListaActividades(i).FechaInicio.AddHours(-oReglaPostaActividadActual.HorasPreDespegue)
                                FechaFinActividadActual = Me.ListaActividades(i).FechaFin.AddHours(oReglaPostaActividadActual.HorasPostAterrizaje)
                            Else
                                FechaInicioActividadActual = Me.ListaActividades(i).FechaInicio
                                FechaFinActividadActual = Me.ListaActividades(i).FechaFin
                            End If

                            If Not (FechaFinActividadNueva <= FechaInicioActividadActual Or FechaInicioActividadNueva >= FechaFinActividadActual) Then
                                EliminarActividad(oActividadNueva, False)
                                Throw New Exception("Ha intentado agregar una actividad en una fecha para la cual ya existía una actividad.")
                            End If
                        Next

                    Case Else
                        FechaInicioActividadNueva = oActividadNueva.FechaInicio
                        FechaFinActividadNueva = oActividadNueva.FechaFin
                        For i = 0 To Me.ListaActividades.Count - 2
                            If Me.ListaActividades(i).GetType Is Type.GetType("SIAVU.Dominio.ActividadPosta") Then
                                oReglaPostaActividadActual = DirectCast(Me.ListaActividades(i), ActividadPosta).Posta.VueloIda.CiudadDestino.Reglas(0)
                                FechaInicioActividadActual = Me.ListaActividades(i).FechaInicio.AddHours(-oReglaPostaActividadActual.HorasPreDespegue)
                                FechaFinActividadActual = Me.ListaActividades(i).FechaFin.AddHours(oReglaPostaActividadActual.HorasPostAterrizaje)
                            Else
                                FechaInicioActividadActual = Me.ListaActividades(i).FechaInicio
                                FechaFinActividadActual = Me.ListaActividades(i).FechaFin
                            End If

                            If Not (FechaFinActividadNueva <= FechaInicioActividadActual Or FechaInicioActividadNueva >= FechaFinActividadActual) Then
                                EliminarActividad(oActividadNueva, False)
                                Throw New Exception("Ha intentado agregar una actividad en una fecha para la cual ya existía una actividad.")
                            End If
                        Next
                End Select
            End If
            Return True
        End Function

        Public Sub LimpiarSession()
            'strSessionListaActividadesEliminadas ="BORRAR" +  Session.SessionID + DirectCast(Me.Page, System.Web.UI.Page).AppRelativeVirtualPath + Me.NombreParaMostrar + "ListaActividadesEliminadas"
            'strSessionListaActividades ="BORRAR" +  Session.SessionID + DirectCast(Me.Page, System.Web.UI.Page).AppRelativeVirtualPath + Me.NombreParaMostrar + "ListaActividades"

            'Session(strSessionListaActividades) = Nothing
            'Session(strSessionListaActividadesEliminadas) = Nothing

            Me.ListaActividades = Nothing
            Me.ListaActividadesEliminadas = Nothing
        End Sub

        Private Function FindActividadByID(ByVal ActividadID As Long) As Actividad
            Try
                If (Me.ListaActividades IsNot Nothing AndAlso Me.ListaActividades.Count > 0) Then
                    For Each oActAux As Actividad In Me.ListaActividades
                        If oActAux.ActividadID = ActividadID Then
                            Return oActAux
                        End If
                    Next
                End If
                
            Catch ex As Exception
                Throw
            End Try

            Return Nothing

        End Function

#End Region

    End Class
End Namespace


